<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    let obj = {
      yy: 'yysjjd',
      fqm: 'fqm',
      get fqm(){
        // 不写get，key: value的默认get规则就是直接拿value，写了get，就会覆盖key: value的value默认get取value的值
        console.log('fqmyybjjzw')
        return 'fqmyysjjd'
      },
        // 这里的value就是传入的修改这个属性的值
      set fqm(value) {
        console.log(value)
      }
    }

    console.log(obj.fqm)
    // 对象可以通过set和get拦截或监听到对于对象的读和写


    class Fqm {
      constructor(yy) {
        this.yy = yy
      }

      // 注意不能同时在构造函数和get / set写一个属性，会冲突
      get fqmyysjjd(){
        // return的值就是fqmyysjjd的值
        if(this.yy == 'yysjjd')
          return 'fqmyysjjd'
         else
          return 'fqmmsjhbjjzw'
      }

      set fqmyysjjd(value){
        console.log('想改' + value + '?')
        console.log('yysjjd, pbd')
        // 这里的value就是传入的修改这个属性的值
        // 如果想要传入的修改的值有什么操作，就可以在set里进行操作了
      }
    }

    let fqm = new Fqm('yysjjd')
    fqm.fqmyysjjd = 'yyxhjj'
    // 修改没有用，还是get   return的值
    console.log(fqm.fqmyysjjd)


// 第一个参数是对象的名字，第二个参数是添加的属性
    Object.defineProperty(fqm, 'xh', {
      get() {
        console.log('xhjj')
        // return的值就是xh的值
        return 'xhjj'
      },
      set(value){
        console.log('yyxhjj')
      }
    })

  </script>
</body>
</html>